草庐IT

JavaBeans 比较

全部标签

c++ - 在C中循环不进行n次比较

如果我有一个我知道需要执行n次的循环,有没有一种方法可以编写一个while(或for)循环,而无需每次都进行比较?如果没有,有没有办法进行宏观转向:inti=0;for(i=0;i进入:operation();operation();operation();operation();operation();附言这是迄今为止我想出的最快的循环。inti=5;while(i-->=0){operation();} 最佳答案 足够智能的编译器会为您做这件事。更具体地说,优化编译器理解循环展开。这是一个相当基本的优化,尤其是在像您的示例这样的

c++ - "less than"ifstream 与 GCC 4 与 6 的比较

我偶然发现了这段代码:std::stringexport_str="/path/to/file";std::ofstreamexport(export_str.c_str());if(export这可以在GCC4.9.3上正常编译和运行,但在GCC6.1.1上会出现此错误:error:nomatchfor‘operator}’and‘int’)if(export我尝试使用GCC6:-std=c++98(编译)-std=c++03(编译)-std=c++11(不编译)编辑:但是,在GCC4中,它仍然使用-std=c++11进行编译。.这个具体事实也在下面的答案中解释。:)所以我猜这方面的

c++ - 快速比较字符数组?

我目前在一个代码库中工作,其中IPv4地址表示为指向u_int8的指针。相等运算符是这样实现的:boolIpv4Address::operator==(constu_int8*inAddress)const{return(*(u_int32*)this->myBytes==*(u_int32*)inAddress);}这可能是禁食的解决方案,但它会导致GCC编译器警告:ipv4address.cpp:65:warning:dereferencingtype-punnedpointerwillbreakstrict-aliasingrules如何在不违反严格别名规则且不损失性能点的情况下

c++ - std::set 在运行时选择更少或更大的比较器

我重构了一些代码,发现除了集合的比较器是less之外,有两个地方可以用相同的代码编写。在一个地方和greater在另一个。像这样的东西:doubleMyClass::Function1(doubleval){std::set>s;//Dosomethingwiths}doubleMyClass::Function2(doubleval){std::set>s;//DothesamethingwithsasinFunction1}所以我想到了:doubleMyClass::GeneralFunction(doubleval,boolcondition){if(condition){//S

c++ - 为什么 std::sort 不接受函数内声明的比较类

我当时正在工作,在一个函数中编写比较器(稍后移动,当我决定最好的地方时),并注意到了这个特性。我想了一会儿,意识到我不明白为什么如果我使用内部比较器代码将无法编译,但外部比较器很好。有什么解释吗?快速测试工具:#include#include#includeclassCompareMe{public:CompareMe(intin):toCompare(in){}inttoCompare;};classComparators{public:booloperator()(CompareMe*first,CompareMe*second){returnfirst->toComparetoC

c++ - 这两种比较STL vector 的方法有什么区别?

很少有在线示例使用相等运算符来比较两个STLvector对象的内容,以验证它们是否具有相同的内容。vectorv1;//addsomeelementstov1vectorv2;//addsomeelementstov2if(v1==v2)cout相反,我阅读了其他示例,其中std::equal()使用函数。boolcompare_vector(constvector&v1,constvector&v2){returnv1.size()==v2.size()&&std::equal(v1.begin(),v1.end(),v2.begin());}这两种比较STLvector的方式有什么

c++ - boost::optional 的比较 (<)、输出 (<<) 和赋值 (=)

我有几个关于如何boost::optional的问题作品。让我们首先这样做:boost::optionali;是i总是等于*i(和其他关系运算符类似)?条件是否正确i和*i未定义?(i仍未设置任何值)什么是std::cout应该打印吗?我很确定i=3始终与*i=3相同.如果是这样,我应该更喜欢哪个? 最佳答案 没有。如果i未初始化,第一个将返回true,而第二个将断言。没有。operator的文档清楚地表明,如果左侧参数未初始化,它将返回true设置右手操作数时。没有operator对于optional所以我假设它会返回unspec

c++ - 比较 std::vector 的指针来检查相等性是否安全?

一次,我创建了一个指向std::vector的指针,然后我做了一些push_back、reserve、resize对该vector的操作,在这样的操作之后,将指针与该vector的地址进行比较以检查指针是否指向该vector是否安全,因为可能会重新分配内存。例如std::vectorvec;vector*pVec=&vec;vec.reserve(10000);assert(pVec==&vec);vec=anotherVec;assert(pVec==&vec);此外,将指针与vector的第一个值进行比较是否安全?例如:std::vectorvec(1,0);int*p=&vec[

c++ - 无符号和有符号比较

这里是非常简单的代码,#includeusingnamespacestd;intmain(){unsignedintu=10;inti;intcount=0;for(i=-1;icount的值为0,为什么? 最佳答案 的两个操作数必须提升为同一类型。显然他们被提升为unsignedint(我面前没有标准中的规则,稍后我会查找)。自(unsignedint)(-1)为假,循环永远不会执行。该规则可在标准第5节(expr)的第10段中找到,其中指出(我已突出显示此处适用的规则):Manybinaryoperatorsthatexpect

c++ - 为什么可以将指针与 '\0' 进行比较? (但不是 'A' )

我在我的代码中发现了一个错误,我将指针与“\0”进行了比较。想知道为什么编译器没有警告我这个错误,我尝试了以下方法。#includestructFoo{charbar[5];};intmain(){Foof;Foo*p=&f;p->bar[0]='\0';assert(p->bar=='\0');//#1.Iforgot[]Now,comparingpointerwithNULLandfails.assert(p->bar=='A');//#2.error:ISOC++forbidscomparisonbetweenpointerandintegerassert(p->bar[0]==